home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Freelog 125
/
Freelog_MarsAvril2015_No125.iso
/
Musique
/
Quod Libet
/
quodlibet-3.3.0-installer.exe
/
bin
/
quodlibet
/
qltk
/
sliderbutton.pyc
(
.txt
)
< prev
next >
Wrap
Python Compiled Bytecode
|
2014-12-31
|
9KB
|
208 lines
# Source Generated with Decompyle++
# File: in.pyc (Python 2.7)
from gi.repository import Gtk, Gdk
from quodlibet.qltk import get_top_parent
from quodlibet.qltk.x import Alignment
class PrimaryWarpsRange(Gtk.Range):
'''A GtkRange which behaves as if gtk-primary-button-warps-slider
was always True.
Adjusts key events depending on the current settings value.
'''
def __init__(self, *args, **kwargs):
super(PrimaryWarpsRange, self).__init__(*args, **kwargs)
self.connect('button-press-event', self._PrimaryWarpsRange__button_event)
self.connect('button-release-event', self._PrimaryWarpsRange__button_event)
def _warps(self):
settings = Gtk.Settings.get_default()
if settings:
try:
return settings.get_property('gtk-primary-button-warps-slider')
except TypeError:
pass
return False
_warps = property(_warps)
def __button_event(self, widget, event):
if not self._warps:
event.button = event.button % 3 + 1
return False
class PrimaryWarpsScale(Gtk.Scale, PrimaryWarpsRange):
pass
class _PopupSlider(Gtk.Button):
def __init__(self, child = None, adj = None):
super(_PopupSlider, self).__init__()
if child:
self.add(child)
self.connect('clicked', self._PopupSlider__clicked)
window = self._PopupSlider__window = Gtk.Window(type = Gtk.WindowType.POPUP)
if not adj:
pass
self._PopupSlider__adj = self._adj
frame = Gtk.Frame()
frame.set_border_width(0)
frame.set_shadow_type(Gtk.ShadowType.OUT)
self.add_events(Gdk.EventMask.SCROLL_MASK)
hscale = PrimaryWarpsScale(adjustment = self._PopupSlider__adj)
hscale.set_orientation(self.ORIENTATION)
window.connect('button-press-event', self._PopupSlider__button)
window.connect('key-press-event', self._PopupSlider__key)
hscale.set_draw_value(False)
self.scale = hscale
window.add(frame)
self._box = Gtk.Box(orientation = self.ORIENTATION)
self._box.add(hscale)
frame.add(self._box)
self.connect('scroll-event', self._PopupSlider__scroll, hscale)
self.connect('destroy', self._PopupSlider__destroy)
def foward_scroll(scale, event):
self.emit('scroll-event', event.copy())
window.connect('scroll-event', foward_scroll)
self.scale.connect('scroll-event', (lambda : True))
def handle_all(scale, event):
return True
self.scale.connect_after('button-press-event', handle_all)
self.scale.connect_after('button-release-event', handle_all)
self.set_slider_length(200)
if child:
self.get_child().show_all()
def _PopupSlider__destroy(self, *args):
self._PopupSlider__window.destroy()
self._PopupSlider__window = None
def set_slider_length(self, length):
if self.ORIENTATION == Gtk.Orientation.HORIZONTAL:
self.scale.set_size_request(length, -1)
else:
self.scale.set_size_request(-1, length)
self._PopupSlider__window.resize(1, 1)
def set_slider_widget(self, widget):
self._box.pack_start(Alignment(widget, left = 3, right = 3), False, True, 0)
def _move_to(self, x, y, w, h, ww, wh, pad = 3):
raise NotImplementedError
def _PopupSlider__clicked(self, button):
if self._PopupSlider__window.get_property('visible'):
return None
window = None._PopupSlider__window
frame = window.get_child()
frame.show_all()
window.size_request()
(dummy, x, y) = self.get_window().get_origin()
(x, y) = self.translate_coordinates(self.get_toplevel(), x, y)[:2]
button_alloc = self.get_allocation()
w = button_alloc.width
h = button_alloc.height
(ww, wh) = window.get_size()
(sx, sy) = self._move_to(x, y, w, h, ww, wh, pad = 3)
window.set_transient_for(get_top_parent(self))
window.move(sx, sy)
window.show()
window.grab_focus()
window.grab_add()
event_time = Gtk.get_current_event_time()
pointer = Gdk.pointer_grab(window.get_window(), True, Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.BUTTON_MOTION_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.SCROLL_MASK, None, None, event_time)
keyboard = Gdk.keyboard_grab(window.get_window(), True, event_time)
grab_sucess = Gdk.GrabStatus.SUCCESS
if pointer != grab_sucess or keyboard != grab_sucess:
window.grab_remove()
window.hide()
if pointer == Gdk.GrabStatus.SUCCESS:
Gdk.pointer_ungrab(event_time)
if keyboard == Gdk.GrabStatus.SUCCESS:
Gdk.keyboard_ungrab(event_time)
def _PopupSlider__scroll(self, widget, ev, hscale):
adj = self._PopupSlider__adj
v = hscale.get_value()
if ev.direction in self.UP:
v += adj.props.step_increment
elif ev.direction in self.DOWN:
v -= adj.props.step_increment
else:
return None
v = None(adj.props.upper, max(adj.props.lower, v))
hscale.set_value(v)
def _PopupSlider__button(self, widget, ev):
self._PopupSlider__popup_hide()
def _PopupSlider__key(self, hscale, ev):
if ev.string in ('\n', '\r', ' ', '\x1b'):
self._PopupSlider__popup_hide()
def _PopupSlider__popup_hide(self):
window = self._PopupSlider__window
event_time = Gtk.get_current_event_time()
window.grab_remove()
Gdk.pointer_ungrab(event_time)
Gdk.keyboard_ungrab(event_time)
window.hide()
window.unrealize()
class HSlider(_PopupSlider):
ORIENTATION = Gtk.Orientation.HORIZONTAL
_adj = Gtk.Adjustment.new(0, 0, 0, 3, 15, 0)
UP = [
Gdk.ScrollDirection.DOWN,
Gdk.ScrollDirection.RIGHT]
DOWN = [
Gdk.ScrollDirection.UP,
Gdk.ScrollDirection.LEFT]
def _move_to(self, x, y, w, h, ww, wh, pad = 3):
if Gtk.Widget.get_default_direction() == Gtk.TextDirection.LTR:
return (x + w + pad, y + (h - wh) // 2)
return (None - ww + pad, y + (h - wh) // 2)
class VSlider(_PopupSlider):
ORIENTATION = Gtk.Orientation.VERTICAL
_adj = Gtk.Adjustment.new(0, 0, 1, 0.05, 0.1, 0)
UP = [
Gdk.ScrollDirection.UP,
Gdk.ScrollDirection.LEFT]
DOWN = [
Gdk.ScrollDirection.DOWN,
Gdk.ScrollDirection.RIGHT]
def _move_to(self, x, y, w, h, ww, wh, pad = 3):
return (x + (w - ww) // 2, y + h + pad)